﻿using System;
using System.Collections.Generic;
using System.IO;

namespace _20161226_HomeworkIOString
{
    class TextAnalise
    {
        //читать текст из файла HT.txt.
        //вывести на консоль количество слов в файле

        public static void PrintToConsoleWordsCountInFile(string path)
        {
            if (File.Exists(path))
            {
                string[] words = File.ReadAllText(path).Split(' ', '.', '\n', '\t', ',', '(', ')');
                int countOfWords = 0;
                for (int i = 0; i < words.Length; i++)
                {
                    if (!String.IsNullOrWhiteSpace(words[i]))
                    {
                        countOfWords++;
                    }
                }
                Console.WriteLine("Number of words: {0}", countOfWords);
            }
            else
                Console.WriteLine("File is not found");
            Console.WriteLine();
        }



        //читать текст из файла HT.txt.
        //вывести на консоль самое длинное слово

        public static void PrintToConsoleTheLongestWordInFile(string path)
        {
            if (File.Exists(path))
            {
                string[] words = File.ReadAllText(path).Split(' ', '.', '\n', '\t', ',', '(', ')');
                int maxLengthOfWord = 0;
                int indexOfLongestWord = 0;
                for (int i = 0; i < words.Length; i++)
                {
                    if (!String.IsNullOrWhiteSpace(words[i]) && words[i].Length > maxLengthOfWord)
                    {
                        maxLengthOfWord = words[i].Length;
                        indexOfLongestWord = i;
                    }
                }
                Console.WriteLine("The longest word: {0}", words[indexOfLongestWord]);
            }
            else
                Console.WriteLine("File is not found");
            Console.WriteLine();
        }


        //Пользователь вводит строку.
        //Необходимо удалить из нее все пробелы, 
        //после этого определить является ли она палиндромом (одинаково пишется как с начала так и с конца)
        public static void IsStringPalindrom(string str)
        {
            Console.Write("Строка \"{0}\"", str);
            string ne = "";
            str = str.ToLower();
            str = str.Replace(" ", "");
            char[] symbols = str.ToCharArray();
            Array.Reverse(symbols);
            if (str != new string(symbols))
            {
                ne = " не";
            }
            Console.WriteLine("{0} является палиндромом.", ne);
            Console.WriteLine();
        }

        //Считать текстовый файл. Определить самое длинное предложение в файле и вывести его номер на экран. 
        //Если предложений несколько - то вывести номера всех таких предложений.
        public static void GetNumberOfTheLongestPhrase(string path)
        {
            if (File.Exists(path))
            {
                string[] phrases = File.ReadAllText(path).Split('.', '!', '?');
                for(int i = 0; i < phrases.Length; i++)
                {
                    phrases[i] = phrases[i].Trim(' ', '\r', '\n', '\t');
                }
                
                List<int> indexes = new List<int>();
                int LenghtOfLongestPhrase = 0;
                int index = 0;
                foreach (var phrase in phrases)
                {
                    if (phrase.Length <= 0)
                        continue;
                        else
                            index++;
                    if (phrase.Length > LenghtOfLongestPhrase)
                    {
                        LenghtOfLongestPhrase = phrase.Length;
                        indexes.Clear();
                        indexes.Add(index);
                    }
                    else if (phrase.Length == LenghtOfLongestPhrase)
                    {
                        indexes.Add(index);
                    }
                }
                if (indexes.Count == 1)
                    Console.WriteLine("Номер самого длинного предложения: {0}", indexes[0]);
                else
                {
                    Console.Write("Номера самых длинных предложений: ");
                    foreach (var i in indexes)
                    {
                        Console.Write("{0} ", i);
                    }
                }
                
            }
            else
                Console.WriteLine("File is not found");
            Console.WriteLine();
        }

        //Считать текстовый файл. Пользователь вводит букву.
        //Необходимо вывести все слова в файле которые начинаются или заканчиваются на эту букву.
        public static void PrintToConsoleAllWordsStartedFinishedFromSymbol(string path, char symbol)
        {
            if (File.Exists(path))
            {
                string symbolConverted = new string(new char[] { symbol });
                string[] words = File.ReadAllText(path).Split(' ', '.', '\n', '\t', ',', '(', ')');

                Console.WriteLine("Слова, которые начинаются или заканчиваются на букву {0}:", symbol);
                bool isWordCriteria = false;

                foreach (var word in words)
                {
                    if (!String.IsNullOrWhiteSpace(word) && 
                        (word.StartsWith(symbolConverted) || word.EndsWith(symbolConverted)))
                    {
                        isWordCriteria = true;
                        Console.WriteLine(word);
                    }
                }
                if (isWordCriteria == false)
                    Console.WriteLine("Отсутствуют");
            }
            else
                Console.WriteLine("File is not found");
            Console.WriteLine();
        }

    }
}

